package org.rain.common.util.json.status;

import org.rain.common.util.json.AbsJsonState;
import org.rain.common.util.json.ContextType;
import org.rain.common.util.json.JsonFsm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * created by yangtong on 2025/4/14 22:41:56
 * <br/>
 * 准备遍历一个json对象字符串，可能是对象，也可能是数组，需要对这两种情况做判断
 */
public class StartState extends AbsJsonState {
    @Override
    public void handleNonWhitespace(JsonFsm fsm, char c) {
        if (c == '{') {
            //表示读取到的是json对象
            fsm.nesting(ContextType.OBJECT);
            //期待读取到key
            fsm.changeState(EXPECT_KEY);
        } else if (c == '[') {
            //表示读取到的是json数组
            fsm.nesting(ContextType.ARRAY);
            //数组里面没有key，都是基本类型和对象的组合，以逗号分隔
            fsm.changeState(IN_ARRAY_VALUE);
        } else {
            throw new RuntimeException("意料之外的字符，期望读到【{、[】，实际读到【" + c + "】");
        }
    }
}
